export{}

// 定义一个方法  获取对象中的属性的值

const obj = { name:'zs', age: 18, height:'1.8m'}

// 定义方法 <对象,属性>

function getPropertyValue(obj:{},key:string) {

}
getPropertyValue(obj,'abc')  //此时 我们类型系统无任何效果


// 定义泛型的语法
// 传入泛型之后 要约束第二个参数  必须为T的key中的值
// key extends keyof T (Key是自定义变量的类型名称)
// extends 继承
// keyof 表示属于后面对象的键中的一个值
interface IProperty {}
function getPropertyValue2<T extends object,Key extends keyof T,key1 extends IProperty>(obj:T,key:Key | '') {

}

// 此时表示 第二个参数 受第一个参数的约束 必须是第一个参数中 key中的一个值
getPropertyValue({username:'zs',age:18},'age')
getPropertyValue2({username:'123'},'username')